package com.circle.interests.api.service;


import com.circle.interests.api.dto.PrizeHonglianProductDto;
import com.circle.interests.api.dto.game.PrizeGameInventoryDto;
import com.circle.interests.api.dto.game.PrizeGameWinResultDto;
import com.circle.interests.api.dto.game.PrizeGameWriteOffResultDto;

import java.util.List;

/**
 * @author zhou
 * @date 2021/12/17
 */
public interface DubboActGamePrizeService {

    /**
     * 分配活动奖品库存
     *
     * @param actCode            活动编号
     * @param prizeInventoryList 库存信息
     */
    Boolean allocateActGameInventory(String actCode, List<PrizeGameInventoryDto> prizeInventoryList);

    /**
     * 指定用户得指定奖品
     *
     * @param actCode   活动编号
     * @param openId    用户openId
     * @param prizeCode 奖品编号
     * @param amount    奖品金额
     * @return 中奖信息
     */
    PrizeGameWinResultDto winPrize(String actCode, String openId, String prizeCode, String uuid, Integer amount);

    /**
     * 指定用户得指定奖品并核销
     *
     * @param actCode     活动编号
     * @param openId      用户openId
     * @param phoneNumber 领奖手机号
     * @param prizeCode   奖品编号
     * @param amount      奖品金额
     * @return 中奖信息
     */
    PrizeGameWriteOffResultDto winAndWriteOffPrize(String actCode, String openId, String phoneNumber, String prizeCode, String uuid, Integer amount, String remark);
    PrizeGameWriteOffResultDto winAndWriteOffPrize(String actCode, String openId, String nickname, String phoneNumber, String prizeCode, String uuid, Integer amount, String remark);

    PrizeGameWriteOffResultDto winAndWriteOffPrize(String actCode, String openId, String nickname, String payAppId, String payOpenId, String phoneNumber, String prizeCode, String uuid, Integer amount, String remark);

    /**
     * 核销奖品，线下卡券类奖品通过接口核销，直充红包类奖品自动核销
     *
     * @param actCode     活动编号
     * @param openId      用户openId
     * @param phoneNumber 领奖手机号
     * @param recordId    中奖记录
     * @return 核销结果
     */
    PrizeGameWriteOffResultDto writeOff(String actCode, String openId, String phoneNumber, String uuid, String remark);

    /**
     * 查询鸿联奖品信息
     *
     * @param productCode 鸿联奖品code
     * @return 鸿联奖品信息
     */
    PrizeHonglianProductDto getHonglianByProductCode(String productCode);
}
